package io.gitee.pkmer.util;

import java.math.BigInteger;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @author <a href="mailto:1193094618@qq.com">pkmer</a>
 * <br>
 * <a href = "https://gitee.com/pkmer/sonatype-central-publisher">Code Repository</a>
 * At 2024/8/26
 */
public class NumUtil {

    /**
     * 结果=((originNum+7)÷n)×n
     * 找到比originNum大n倍数的最近一个数
     * @param originNum 原始的数字
     * @return n的倍数
     */
    public static int findNextMultipleOfN(int originNum, int n) {
        return ((originNum + (n - 1)) / n) * n;
    }

    /**
     * 生成大质数
     *
     * @param num       要生成的大质数个数
     * @param bitLength 控制生成大质数的位数
     * @param seed      随机数种子，为null不指定
     * @return 大质数
     */
    public static List<Long> getBigPrime(int num, int bitLength, final Long seed) {
        List<Long> results = new ArrayList<>();

        // 使用指定算法的随机数生成器（例如，"SHA1PRNG"）
        Random random = null;
        try {
            random = SecureRandom.getInstance("SHA1PRNG");
            if (seed != null) {
                random.setSeed(seed);
            }
            for (int i = 0; i < num; i++) {
                results.add(BigInteger.probablePrime(bitLength, random).longValue());
            }
            return results;
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}
